# 定义编译器
CC=gcc

# 定义编译选项
CFLAGS=-fPIC -c
SHARED=-shared
RM=rm -f

# 定义动态库的名称
LIB1=contact
LIB2=msgqueue
LIB3=printOut
LIB4=seqlist
LIB5=stylefile
LIB6=user
LIB7=sig

# 默认目标
LIBS=lib$(LIB1).so
LIBS+=lib$(LIB2).so
LIBS+=lib$(LIB3).so
LIBS+=lib$(LIB4).so
LIBS+=lib$(LIB5).so
LIBS+=lib$(LIB6).so
LIBS+=lib$(LIB7).so

# 指定动态库生成位置
OUT_LIBS_PATH=../../libs/

# 指定依赖头文件位置
INCLUDE_PATH=-I../../include/

all:$(LIBS)

# 生成动态库
lib$(LIB1).so:$(LIB1).o
	$(CC) $(SHARED) $^ -o $(OUT_LIBS_PATH)$@
lib$(LIB2).so:$(LIB2).o
	$(CC) $(SHARED) $^ -o $(OUT_LIBS_PATH)$@
lib$(LIB3).so:$(LIB3).o
	$(CC) $(SHARED) $^ -o $(OUT_LIBS_PATH)$@
lib$(LIB4).so:$(LIB4).o
	$(CC) $(SHARED) $^ -o $(OUT_LIBS_PATH)$@
lib$(LIB5).so:$(LIB5).o
	$(CC) $(SHARED) $^ -o $(OUT_LIBS_PATH)$@
lib$(LIB6).so:$(LIB6).o
	$(CC) $(SHARED) $^ -o $(OUT_LIBS_PATH)$@
lib$(LIB7).so:$(LIB7).o
	$(CC) $(SHARED) $^ -o $(OUT_LIBS_PATH)$@

# 规则来编译源文件为对象文件
%.o:%.c
	$(CC) $(CFLAGS) $^ -o $@ $(INCLUDE_PATH)

.PHONY:clean
clean:
	$(RM) $(OUT_LIBS_PATH)*.so *.o